package common

import (
	"bufio"
	"encoding/json"
	"os"
)

type Config struct {
	AppName  string         `json:"app_name,omitempty"`
	AppMode  string         `json:"app_mode,omitempty"`
	AppHost  string         `json:"app_host,omitempty"`
	AppPort  string         `json:"app_port,omitempty"`
	Database DatabaseConfig `json:"database,omitempty"`
	Redis    RedisConfig 	`json:"redis,omitempty"`
}

type DatabaseConfig struct {
	Driver    string `json:"driver,omitempty"`
	User      string `json:"user,omitempty"`
	Password  string `json:"password,omitempty"`
	Host      string `json:"host,omitempty"`
	Port      string `json:"port,omitempty"`
	DbName    string `json:"db_name,omitempty"`
	Charset   string `json:"charset,omitempty"`
	ShowSql   bool   `json:"show_sql,omitempty"`
	ParseTime string `json:"parse_time,omitempty"`
	Loc       string `json:"loc,omitempty"`
}

type RedisConfig struct {
	Addr     string `json:"addr"`
	Password string `json:"password"`
	DB       int 	`json:"db"`
}

var _cfg *Config = nil

func GetConfig() *Config {
	return _cfg
}

func ParseConfig(path string) (*Config, error) {
	file, err := os.Open(path)
	if err != nil {
		panic(err)
	}
	defer file.Close()

	reader := bufio.NewReader(file)
	decoder := json.NewDecoder(reader)
	err = decoder.Decode(&_cfg)

	if err != nil {
		return nil, err
	}

	return _cfg, nil
}
